﻿using Onshi.POS.AccesoDatos.Interfaces;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace Onshi.POS.AccesoDatos
{
    public class ServicioDatosProveedores : ServicioDatosBase, IServicioDatosProveedores
    {
        #region Metodos

        public DataSet Proveedores_DevolverTodos(Boolean incluirImagen)
        {
            try
            {
                var cm = new SqlCommand("Proveedores_DevolverTodos", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IncluirImagen", incluirImagen);
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Proveedores_DevolverPorId(Int32 idProveedor, Boolean incluirImagen)
        {
            try
            {
                var cm = new SqlCommand("Proveedores_DevolverPorId", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdProveedor", idProveedor);
                cm.Parameters.AddWithValue("@IncluirImagen", incluirImagen);
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public DataSet Proveedores_DevolverPorCodigo(String codigo, Boolean incluirImagen)
        {
            try
            {
                var cm = new SqlCommand("Proveedores_DevolverPorCodigo", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@Codigo", codigo);
                cm.Parameters.AddWithValue("@IncluirImagen", incluirImagen);
                var da = new SqlDataAdapter(cm);
                var ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 Proveedores_Insertar(Int32 idRubroProveedor, Byte idTipoIva, Int32 idListaPrecioCompra, String codigo, String nombre, Decimal limiteDeuda, String cuit, String email, String sitioWeb, String observaciones, Byte[] imagen)
        {
            try
            {
                var cm = new SqlCommand("Proveedores_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdRubroProveedor", idRubroProveedor);
                cm.Parameters.AddWithValue("@IdTipoIva", idTipoIva);
                cm.Parameters.AddWithValue("@IdListaPrecioCompra", idListaPrecioCompra);
                cm.Parameters.AddWithValue("@Codigo", codigo);
                cm.Parameters.AddWithValue("@Nombre", nombre);
                cm.Parameters.AddWithValue("@LimiteDeuda", limiteDeuda);
                cm.Parameters.AddWithValue("@Cuit", cuit);
                cm.Parameters.AddWithValue("@Email", email);
                cm.Parameters.AddWithValue("@SitioWeb", sitioWeb);
                cm.Parameters.AddWithValue("@Observaciones", observaciones);
                cm.Parameters.AddWithValue("@Imagen", imagen);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Proveedores_Modificar(Int32 idProveedor, Int32 idRubroProveedor, Byte idTipoIva, Int32 idListaPrecioCompra, String codigo, String nombre, Decimal limiteDeuda, String cuit, String email, String sitioWeb, String observaciones, Byte[] imagen, Boolean estaEliminado)
        {
            try
            {
                var cm = new SqlCommand("Proveedores_Modificar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdProveedor", idProveedor);
                cm.Parameters.AddWithValue("@IdRubroProveedor", idRubroProveedor);
                cm.Parameters.AddWithValue("@IdTipoIva", idTipoIva);
                cm.Parameters.AddWithValue("@IdListaPrecioCompra", idListaPrecioCompra);
                cm.Parameters.AddWithValue("@Codigo", codigo);
                cm.Parameters.AddWithValue("@Nombre", nombre);
                cm.Parameters.AddWithValue("@LimiteDeuda", limiteDeuda);
                cm.Parameters.AddWithValue("@Cuit", cuit);
                cm.Parameters.AddWithValue("@Email", email);
                cm.Parameters.AddWithValue("@SitioWeb", sitioWeb);
                cm.Parameters.AddWithValue("@Observaciones", observaciones);
                cm.Parameters.AddWithValue("@Imagen", imagen);
                cm.Parameters.AddWithValue("@EstaEliminado", estaEliminado);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 DomiciliosProveedores_Insertar(Int32 idProveedor, Byte idTipoDomicilio, Int32 idBarrio, String calle, String numero, String piso, String departamento)
        {
            try
            {
                var cm = new SqlCommand("DomiciliosProveedores_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdProveedor", idProveedor);
                cm.Parameters.AddWithValue("@IdTipoDomicilio", idTipoDomicilio);
                cm.Parameters.AddWithValue("@IdBarrio", idBarrio);
                cm.Parameters.AddWithValue("@Calle", calle);
                cm.Parameters.AddWithValue("@Numero", numero);
                cm.Parameters.AddWithValue("@Piso", piso);
                cm.Parameters.AddWithValue("@Departamento", departamento);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void DomiciliosProveedores_EliminarPorProveedor(Int32 idProveedor)
        {
            try
            {
                var cm = new SqlCommand("DomiciliosProveedores_EliminarPorProveedor", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdProveedor", idProveedor);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public Int32 TelefonosProveedores_Insertar(Int32 idProveedor, Byte idTipoTelefono, String codigoArea, String numero)
        {
            try
            {
                var cm = new SqlCommand("TelefonosProveedores_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdProveedor", idProveedor);
                cm.Parameters.AddWithValue("@IdTipoTelefono", idTipoTelefono);
                cm.Parameters.AddWithValue("@CodigoArea", codigoArea);
                cm.Parameters.AddWithValue("@Numero", numero);
                cm.Connection.Open();
                return Convert.ToInt32(cm.ExecuteScalar());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void TelefonosProveedores_EliminarPorProveedor(Int32 idProveedor)
        {
            try
            {
                var cm = new SqlCommand("TelefonosProveedores_EliminarPorProveedor", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdProveedor", idProveedor);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ProveedoresTiposFormasPagos_EliminarPorProveedor(Int32 idProveedor)
        {
            try
            {
                var cm = new SqlCommand("ProveedoresTiposFormasPagos_EliminarPorProveedor", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdProveedor", idProveedor);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ProveedoresTiposFormasPagos_Insertar(Int32 idProveedor, Byte idTipoFormaPago)
        {
            try
            {
                var cm = new SqlCommand("ProveedoresTiposFormasPagos_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdProveedor", idProveedor);
                cm.Parameters.AddWithValue("@IdTipoFormaPago", idTipoFormaPago);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ProveedoresCamposPersonalizadosProveedores_EliminarPorProveedor(Int32 idProveedor)
        {
            try
            {
                var cm = new SqlCommand("ProveedoresCamposPersonalizadosProveedores_EliminarPorProveedor", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdProveedor", idProveedor);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ProveedoresCamposPersonalizadosProveedores_Insertar(Int32 idProveedor, Int32 idCampoPersonalizadoProveedor, String valor)
        {
            try
            {
                var cm = new SqlCommand("ProveedoresCamposPersonalizadosProveedores_Insertar", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdProveedor", idProveedor);
                cm.Parameters.AddWithValue("@IdCampoPersonalizadoProveedor", idCampoPersonalizadoProveedor);
                cm.Parameters.AddWithValue("@Valor", valor);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void ProveedoresCamposPersonalizadosProveedores_EliminarPorCampoPersonalizadoProveedor(Int32 idCampoPersonalizadoProveedor)
        {
            try
            {
                var cm = new SqlCommand("ProveedoresCamposPersonalizadosProveedores_EliminarPorCampoPersonalizadoProveedor", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdCampoPersonalizadoProveedor", idCampoPersonalizadoProveedor);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void Proveedores_ModificarRubroProveedor(Int32 idRubroProveedorNuevo, Int32 idRubroProveedorViejo)
        {
            try
            {
                var cm = new SqlCommand("Proveedores_ModificarRubroProveedor", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdRubroProveedorNuevo", idRubroProveedorNuevo);
                cm.Parameters.AddWithValue("@IdRubroProveedorViejo", idRubroProveedorViejo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        public void DomiciliosProveedores_ModificarBarrio(Int32 idBarrioNuevo, Int32 idBarrioViejo)
        {
            try
            {
                var cm = new SqlCommand("DomiciliosProveedores_ModificarBarrio", Conexion);
                cm.CommandType = CommandType.StoredProcedure;
                cm.Parameters.AddWithValue("@IdBarrioNuevo", idBarrioNuevo);
                cm.Parameters.AddWithValue("@IdBarrioViejo", idBarrioViejo);
                cm.Connection.Open();
                cm.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (Conexion.State == ConnectionState.Open)
                    Conexion.Close();
            }
        }

        #endregion
    }
}
